#pragma once

#include <vector>
#include <fstream>
#include <filesystem>

#include "cell.h"
#include "config.h"
#include "PT_table.h"

using namespace std;

class Pipe
{
private:
    vector<Cell> cells; // 所有网格
    Cell output_cell;   // 出口网格
    double current_time;    // 当前时间

    Config config;          // 配置
    PT_Table pt_table;      // P-T 表

    // 各种中间文件的输出流
    fstream output_P;           // 压强输出流  
    fstream output_T;           // 温度输出流
    fstream output_v_gas;       // 气体速度输出流
    fstream output_v_liq;       // 液体速度输出流
    fstream output_alpha_gas;   // 气体体积分数输出流
    fstream output_alpha_liq;   // 液体体积分数输出流
    fstream output_cost;        // 残差输出流

    double last_cost;           // 最近一次跌打的残差

public:
    Pipe();
    ~Pipe();

    bool setup();   // 初始化管道
    void run();     // 运行管道
    void step();    // 单步运行
    void save_output(); // 保存输出
};